package edu.ar.modulo3.perist.dao.impl.jdbc;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import edu.ar.modulo3.model.Avion;
import edu.ar.modulo3.model.Vuelo;
import edu.ar.modulo3.perist.common.ConnectionManager;
import edu.ar.modulo3.perist.dao.IAvionDAO;
import edu.ar.modulo3.perist.dao.IVueloDAO;
import edu.ar.modulo3.perist.factory.BaseDAOFactory;

public class VueloDAOJdbcImpl implements IVueloDAO {

	public void save(Vuelo enttity) {
		// TODO Auto-generated method stub

	}

	public void update(Vuelo enttity) {
		// TODO Auto-generated method stub

	}

	public void delet(Vuelo enttity) {
		// TODO Auto-generated method stub

	}

	public List<Vuelo> getAll() {
		PreparedStatement st = null;
		ResultSet rs = null;
		Vuelo vuelo = null;
		List<Vuelo> vuelolist = new ArrayList<Vuelo>();
		
		String sql = "SELECT * FROM Vuelo WHERE fechaVuelo <= ?";
		
		try {
			
			st = ConnectionManager.getInstance().getConnection().prepareStatement(sql);
			st.setDate(1, new Date( Calendar.getInstance().getTimeInMillis() ) );
			rs = st.executeQuery();			
			
			while( rs.next() ) {
				
				vuelo = new Vuelo();
				vuelo.setIdVuelo ( rs.getLong("idVuelo" ) );
				vuelo.setDestino( rs.getString("destino") );
				vuelo.setCantReservas( rs.getLong("cant_reservas") );
				vuelo.setFechaVuelo( rs.getDate("fechaVuelo") );
				vuelo.setCosto( rs.getBigDecimal("costo") );
				vuelo.setAvion( getAcionById( rs.getLong( "idAvion" ) )  );
				vuelolist.add( vuelo );				
			}
			
					
		} catch (SQLException e) {
			
			System.out.println("ERROR EN EL SATEMENT");
			e.printStackTrace();
		}
		
		return vuelolist;
	}

	public Vuelo getElemntById(Long id) {
		PreparedStatement st = null;
		ResultSet rs = null;
		Vuelo vuelo = new Vuelo();
		String sql = "SELECT * FROM Vuelo WHERE idVuelo = ?";
		
		try {
			
			st = ConnectionManager.getInstance().getConnection().prepareStatement(sql);
			st.setLong(1, id);
			rs = st.executeQuery();
			rs.next();
							
			vuelo.setIdVuelo ( rs.getLong("idVuelo" ) );
			vuelo.setDestino( rs.getString("destino") );
			vuelo.setCantReservas( rs.getLong("cant_reservas") );
			vuelo.setFechaVuelo( rs.getDate("fechaVuelo") );
			vuelo.setCosto( rs.getBigDecimal("costo") );
			vuelo.setAvion( getAcionById( rs.getLong( "idAvion" ) )  );
					
		} catch (SQLException e) {
			
			System.out.println("ERROR EN EL SATEMENT");
			e.printStackTrace();
		}
		
		return vuelo;
	}
	
	private Avion getAcionById( Long id ) {
		IAvionDAO avionDAO = BaseDAOFactory.getInstance().getAvionDAO();
		return avionDAO.getElemntById(id);
	}

}
